from typing import List, Tuple, Dict, Any, Iterable

from typing import overload
import numpy
BROWN: Any
DUAL: Any
FISHEYE: Any
FISHEYE_OPENCV: Any
PERSPECTIVE: Any
SPHERICAL: Any
aspect_ratio: Any
focal: Any
k1: Any
k2: Any
k3: Any
k4: Any
p1: Any
p2: Any
transition: Any

def absolute_pose_n_points(arg0: Iterable, arg1: Iterable) -> numpy.ndarray: ...
def absolute_pose_n_points_known_rotation(arg0: Iterable, arg1: Iterable) -> numpy.ndarray: ...
def absolute_pose_three_points(arg0: Iterable, arg1: Iterable) -> List[numpy.ndarray]: ...
def compute_camera_mapping(arg0: Camera, arg1: Camera, arg2: int, arg3: int) -> Tuple[numpy.ndarray,numpy.ndarray]: ...
def essential_five_points(arg0: Iterable, arg1: Iterable) -> List[numpy.ndarray]: ...
def essential_n_points(arg0: Iterable, arg1: Iterable) -> List[numpy.ndarray]: ...
def relative_pose_from_essential(arg0: Iterable, arg1: Iterable, arg2: Iterable) -> numpy.ndarray: ...
def relative_pose_refinement(arg0: Iterable, arg1: Iterable, arg2: Iterable, arg3: int) -> numpy.ndarray: ...
def relative_rotation_n_points(arg0: Iterable, arg1: Iterable) -> numpy.ndarray: ...
def triangulate_bearings_dlt(arg0: List[numpy.ndarray], arg1: Iterable, arg2: float, arg3: float) -> Tuple[bool,numpy.ndarray]: ...
def triangulate_bearings_midpoint(arg0: Iterable, arg1: Iterable, arg2: List[float], arg3: float) -> Tuple[bool,numpy.ndarray]: ...
def triangulate_two_bearings_midpoint(arg0: Iterable, arg1: Iterable) -> numpy.ndarray: ...
def triangulate_two_bearings_midpoint_many(arg0: Iterable, arg1: Iterable, arg2: Iterable, arg3: Iterable) -> List[numpy.ndarray]: ...

class Camera:
    def __init__(self, *args, **kwargs) -> None: ...
    @staticmethod
    def create_brown(arg0: float, arg1: float, arg2: Iterable, arg3: Iterable) -> Camera: ...
    @staticmethod
    def create_dual(arg0: float, arg1: float, arg2: float, arg3: float) -> Camera: ...
    @staticmethod
    def create_fisheye(arg0: float, arg1: float, arg2: float) -> Camera: ...
    @staticmethod
    def create_fisheye_opencv(arg0: float, arg1: float, arg2: Iterable, arg3: Iterable) -> Camera: ...
    @staticmethod
    def create_perspective(arg0: float, arg1: float, arg2: float) -> Camera: ...
    @staticmethod
    def create_spherical() -> Any: ...
    @staticmethod
    def create_fisheye62(arg0: float, arg1: float, arg2: Iterable, arg3: Iterable) -> Camera: ...
    @staticmethod
    def create_radial(arg0: float, arg1: float, arg2: Iterable, arg3: Iterable) -> Camera: ...
    @staticmethod
    def create_simple_radial(arg0: float, arg1: float, arg2: Iterable, arg3: float) -> Camera: ...

    def get_K(self) -> numpy.ndarray: ...
    def get_K_in_pixel_coordinates(self, arg0: int, arg1: int) -> numpy.ndarray: ...
    def get_parameters_map(self) -> Dict[CameraParameters,float]: ...
    def get_parameters_types(self) -> List[CameraParameters]: ...
    def get_parameters_values(self) -> numpy.ndarray: ...
    @staticmethod
    def is_panorama(arg0: str) -> bool: ...
    def pixel_bearing(self, arg0: Iterable) -> numpy.ndarray: ...
    def pixel_bearing_many(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def project(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def project_many(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def set_parameter_value(self, arg0: CameraParameters, arg1: float) -> None: ...
    def __copy__(self) -> Camera: ...
    def __deepcopy__(self, arg0: dict) -> Camera: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def aspect_ratio(self) -> float: ...
    @aspect_ratio.setter
    def aspect_ratio(self, val: float) -> None: ...
    @property
    def distortion(self) -> numpy.ndarray: ...
    @distortion.setter
    def distortion(self, val: numpy.ndarray) -> None: ...
    @property
    def focal(self) -> float: ...
    @focal.setter
    def focal(self, val: float) -> None: ...
    @property
    def height(self) -> int: ...
    @height.setter
    def height(self, val: int) -> None: ...
    @property
    def id(self) -> str: ...
    @id.setter
    def id(self, val: str) -> None: ...
    @property
    def k1(self) -> float: ...
    @property
    def k2(self) -> float: ...
    @property
    def k3(self) -> float: ...
    @property
    def k4(self) -> float: ...
    @property
    def k5(self) -> float: ...
    @property
    def k6(self) -> float: ...
    @property
    def p1(self) -> float: ...
    @property
    def p2(self) -> float: ...
    @property
    def principal_point(self) -> numpy.ndarray: ...
    @principal_point.setter
    def principal_point(self, val: numpy.ndarray) -> None: ...
    @property
    def projection_type(self) -> str: ...
    @property
    def transition(self) -> float: ...
    @transition.setter
    def transition(self, val: float) -> None: ...
    @property
    def width(self) -> int: ...
    @width.setter
    def width(self, val: int) -> None: ...

class CameraParameters:
    aspect_ratio: Any = ...
    focal: Any = ...
    k1: Any = ...
    k2: Any = ...
    k3: Any = ...
    k4: Any = ...
    p1: Any = ...
    p2: Any = ...
    transition: Any = ...
    def __init__(self, arg0: int) -> None: ...
    def __eq__(self, arg0: CameraParameters) -> bool: ...
    def __getstate__(self) -> tuple: ...
    def __hash__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, arg0: CameraParameters) -> bool: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def __members__(self) -> dict: ...

class Pose:
    @overload
    def __init__(self, rotation: Iterable = ..., translation: Iterable = ...) -> None: ...
    @overload
    def __init__(self, rotation: Iterable = ..., translation: Iterable = ...) -> None: ...
    @overload
    def __init__(self, arg0: Iterable) -> None: ...
    @overload
    def __init__(*args, **kwargs) -> None: ...
    def compose(self, arg0: Pose) -> Pose: ...
    def get_R_cam_to_world(self) -> numpy.ndarray: ...
    def get_R_cam_to_world_min(self) -> numpy.ndarray: ...
    def get_R_world_to_cam(self) -> numpy.ndarray: ...
    def get_R_world_to_cam_min(self) -> numpy.ndarray: ...
    def get_Rt(self) -> numpy.ndarray: ...
    def get_cam_to_world(self) -> numpy.ndarray: ...
    def get_origin(self) -> numpy.ndarray: ...
    def get_rotation_matrix(self) -> numpy.ndarray: ...
    def get_t_cam_to_world(self) -> numpy.ndarray: ...
    def get_t_world_to_cam(self) -> numpy.ndarray: ...
    def get_world_to_cam(self) -> numpy.ndarray: ...
    def inverse(self) -> Pose: ...
    def relative_to(self, arg0: Pose) -> Pose: ...
    @overload
    def set_from_cam_to_world(self, arg0: numpy.ndarray) -> None: ...
    @overload
    def set_from_cam_to_world(self, arg0: numpy.ndarray, arg1: numpy.ndarray) -> None: ...
    @overload
    def set_from_cam_to_world(self, arg0: numpy.ndarray, arg1: numpy.ndarray) -> None: ...
    @overload
    def set_from_cam_to_world(*args, **kwargs) -> Any: ...
    @overload
    def set_from_world_to_cam(self, arg0: numpy.ndarray) -> None: ...
    @overload
    def set_from_world_to_cam(self, arg0: numpy.ndarray, arg1: numpy.ndarray) -> None: ...
    @overload
    def set_from_world_to_cam(self, arg0: numpy.ndarray, arg1: numpy.ndarray) -> None: ...
    @overload
    def set_from_world_to_cam(*args, **kwargs) -> Any: ...
    def set_origin(self, arg0: Iterable) -> None: ...
    def set_rotation_matrix(self, arg0: Iterable) -> None: ...
    def transform(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def transform_inverse(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def transform_inverse_many(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def transform_many(self, arg0: numpy.ndarray) -> numpy.ndarray: ...
    def __copy__(self) -> Pose: ...
    def __deepcopy__(self, arg0: dict) -> Pose: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def rotation(self) -> numpy.ndarray: ...
    @rotation.setter
    def rotation(self, val: Iterable) -> None: ...
    @property
    def translation(self) -> numpy.ndarray: ...
    @translation.setter
    def translation(self, val: Iterable) -> None: ...

class ProjectionType:
    BROWN: Any = ...
    DUAL: Any = ...
    FISHEYE: Any = ...
    FISHEYE_OPENCV: Any = ...
    PERSPECTIVE: Any = ...
    SPHERICAL: Any = ...
    def __init__(self, arg0: int) -> None: ...
    def __eq__(self, arg0: ProjectionType) -> bool: ...
    def __getstate__(self) -> tuple: ...
    def __hash__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, arg0: ProjectionType) -> bool: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def __members__(self) -> dict: ...
